package com.interview;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.text.NumberFormat;

/**
 * poi相关操作练习
 * Author: tonggen
 * Date: 2019/7/17
 * time: 10:21 AM
 */
public class ExcelUtils {

    /**
     * 通过文件 或者文件流 读取其中的数据 pom导入apache的包
     * @param file
     */
    private void getExelData(MultipartFile file) throws Exception {

        Workbook workbook = null;
        if (file.getOriginalFilename().endsWith("xls")) {
            workbook = new HSSFWorkbook(file.getInputStream());
            // Excel 2007/2010
        } else if (file.getOriginalFilename().endsWith("xlsx")){
            workbook = new XSSFWorkbook(file.getInputStream());
        }

        Sheet firstSheet = workbook.getSheetAt(0);
        for (Row row : firstSheet) {
            Cell cell = row.getCell(0);
            Object cellValue = null;
            //取值
            if(cell!=null){
                //判断cell类型
                switch(cell.getCellType()){
                    case Cell.CELL_TYPE_NUMERIC:{
                        NumberFormat nf = NumberFormat.getInstance();
                        String s = nf.format(cell.getNumericCellValue());
                        //这种方法对于自动加".0"的数字可直接解决
                        //但如果是科学计数法的数字就转换成了带逗号的，例如：12345678912345的科学计数法是1.23457E+13，经过这个格式化后就变成了字符串“12,345,678,912,345”，这也并不是想要的结果，所以要将逗号去掉
                        if (s.indexOf(",") >= 0) {
                            s = s.replace(",", "");
                        }
                        cellValue = s;
                        break;
                    }
                    case Cell.CELL_TYPE_FORMULA:{
                        //判断cell是否为日期格式
                        if(DateUtil.isCellDateFormatted(cell)){
                            //转换为日期格式YYYY-mm-dd
                            cellValue = cell.getDateCellValue();
                        }else{
                            //数字
                            cellValue = String.valueOf(cell.getNumericCellValue());
                        }
                        break;
                    }
                    case Cell.CELL_TYPE_STRING:{
                        cellValue = cell.getRichStringCellValue().getString();
                        break;
                    }
                    default:
                        cellValue = "";
                }
            }
        }
    }

}
